package cn.miaoyao.miaoyaoms.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;

/**
 * @Author: shushu
 * @Date: 2023/04/21/19:02
 * @Description:基本父类
 */
public abstract class BaseController {
    @Autowired
    private MessageSource messageSource;

    /**
     * 读取资源文件中的信息
     * @param key 资源信息的key值
     * @param args 填充的参数
     * @return
     */
    public String getMsg(String key,Object...args){
        return messageSource.getMessage(key,args, Locale.getDefault());
    }
    @InitBinder
    public void initBinder(WebDataBinder binder){
        SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
        binder.registerCustomEditor(Date.class,new CustomDateEditor(sim,true));
    }

    /**
     * 为文件生成新的名字
     * @param file 上传的文件
     * @return
     */
   protected String createNewFileName(MultipartFile file){
        if(file!=null){
            String[] str = file.getOriginalFilename().split("\\.");
            String extName = str[str.length - 1];//获取到后缀名。
            return UUID.randomUUID().toString().replace("-","")+"."+extName;
        }
        return null;
   }
   protected String saveFile(String fileNewName, HttpServletRequest request,MultipartFile file){
       //取得文件的保存路径：就是项目的部署路径的根路径。
       String rootPath = request.getSession().getServletContext().getRealPath("/");
       //文件上传的路径（包括文件的新名字）
       String pathName=rootPath+this.getDir()+fileNewName;
       System.out.println(pathName);
       //实现文件的保存
       try{
           File realPathFile = new File(pathName);
           if(!realPathFile.getParentFile().exists()){
               realPathFile.getParentFile().mkdirs();//当父目录不存在就创建父目录。
           }
          file.transferTo(realPathFile);//开始保存到磁盘中的某一地方
       }catch (Exception e){
           e.printStackTrace();
       }
       //返回上传文件的相对路径用来保存到数据库中去。
       return fileNewName;
   }
   //相对路径文件夹。
   protected abstract String getDir();

    /**
     * 根据文件名字删除文件。
     * @param request 用来获取项目的部署路径
     * @param fileName 要删除的文件的名字
     */
   public void deleteFile(HttpServletRequest request,String fileName){
       //获取文件路径
       String filePath = request.getSession().getServletContext().getRealPath(this.getDir()) + fileName;
       System.out.println(filePath);
       File file = new File(filePath);
       if(file.exists())
           file.delete();
   }
}
